﻿using CongregacaoOs.Business;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.EntityClient;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace CCBIntegrationService
{
    public class VerificaOS : IVerificaOS
    {

        public bool GetOsComVencimentoParaHoje()
        {
            List<OsDados> _result = new List<OsDados>();

            using (EntityConnection conn = new EntityConnection("name = ccbordemservEntities"))
            {
                try
                {
                    using (EntityCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = "ccbordemservEntities.OSComVencimentoParaUmaSemana";
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;



                        using (conn)
                        {
                            if (conn.State == ConnectionState.Closed) conn.Open();
                            using (EntityDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
                            {


                                while (reader.Read())
                                {
                                    OsDados _os = new OsDados();
                                    _os.idOs = reader.IsDBNull(reader.GetOrdinal("idOs")) == false ? reader.GetInt32(reader.GetOrdinal("idOs")) : 0;
                                    _os.codigo = reader.IsDBNull(reader.GetOrdinal("codigo")) == false ? reader.GetString(reader.GetOrdinal("codigo")) : "";
                                    _os.dataCriacao = reader.IsDBNull(reader.GetOrdinal("dataCriacao")) == false ? reader.GetDateTime(reader.GetOrdinal("dataCriacao")) : DateTime.Now;
                                    _os.dataPrazo = reader.IsDBNull(reader.GetOrdinal("dataPrazo")) == false ? reader.GetDateTime(reader.GetOrdinal("dataPrazo")) : DateTime.Now;
                                    _os.AdmOut = reader.IsDBNull(reader.GetOrdinal("AdmOut")) == false ? reader.GetString(reader.GetOrdinal("AdmOut")) : "";
                                    _os.titulo = reader.IsDBNull(reader.GetOrdinal("titulo")) == false ? reader.GetString(reader.GetOrdinal("titulo")) : "";
                                    _os.texto = reader.IsDBNull(reader.GetOrdinal("texto")) == false ? reader.GetString(reader.GetOrdinal("texto")) : "";
                                    _os.IdSetorOut = reader.IsDBNull(reader.GetOrdinal("IdSetorOut")) == false ? reader.GetInt32(reader.GetOrdinal("IdSetorOut")) : 0;
                                    _result.Add(_os);
                                }
                            }
                        }

                        #region Envio de E-mail
                        try
                        {
                            for (int i = 0; i < _result.Count; i++)
                            {

                                using (ccSendEmail busEmail = new ccSendEmail())
                                {
                                    using (ClassEmail email = new ClassEmail())
                                    {
                                        email.Assunto = @"Portal de O.S - O Prazo O.S vence hoje";
                                        email.Menssagem = "<p  style = 'font-family:Arial;font-size:23pt;color:RED'>Vencimento do Prazo para Atendimento</p>" +
                                            "<div style = 'border-top:3px solid #22BCE5>...............................................</div>'" +
                                            "<br/>" + "<b>Informamos que o prazo para conclusão da O.S: </b>" + _result[i].codigo + "<b> É hoje!</b><br />" +
                                            "<b>Setor responsável:</b> " + _result[i].IdSetorOut + " <br /> " +
                                            "<b>Título da O.S:</b> " + _result[i].titulo + " <br /> " +
                                            "<b>Texto da solicitação:</b> " + _result[i].texto + " <br /> " +
                                            "<a href='http://www.ccbos.com.br'>Acessar O.S!</a> " +
                                            "<br /><br /><br />" +
                                            "<b><code>Grupo de Apoio: Regional Ribeirão Preto <br/> Congregação Cristã no Brasil</code></b>" +
                                            "<br/><br/><b>Não responda este e-mail</b>,";


                                        List<String> listaDestinatarios = PessoaEmailBySetor(Convert.ToInt32(_result[i].IdSetorOut));
                                        foreach (var item in listaDestinatarios)
                                        {
                                            email.ListofDestinatario.Add(item);

                                        }

                                        busEmail.SendMail(email);

                                    }
                                }
                            }
                            return true;
                        }
                        catch (Exception)
                        {
                            return false;
                        }
                        #endregion
                    }
                    
                }
                catch (Exception)
                {
                    return false;
                }

            }
        }


        public bool GetOsComVencimentoParaUmaSemana()
        {
            List<OsDados> _result = new List<OsDados>();
            using (EntityConnection conn = new EntityConnection("name = ccbordemservEntities"))
            {
                try
                {
                    using (EntityCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = "ccbordemservEntities.OsComVencimentoParaHoje";
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;



                        using (conn)
                        {
                            if (conn.State == ConnectionState.Closed) conn.Open();
                            using (EntityDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
                            {

                                
                                while (reader.Read())
                                {
                                    OsDados _os = new OsDados();
                                    _os.idOs = reader.IsDBNull(reader.GetOrdinal("idOs")) == false ? reader.GetInt32(reader.GetOrdinal("idOs")) : 0;
                                    _os.codigo = reader.IsDBNull(reader.GetOrdinal("codigo")) == false ? reader.GetString(reader.GetOrdinal("codigo")) : "";
                                    _os.dataCriacao = reader.IsDBNull(reader.GetOrdinal("dataCriacao")) == false ? reader.GetDateTime(reader.GetOrdinal("dataCriacao")) : DateTime.Now;
                                    _os.dataPrazo = reader.IsDBNull(reader.GetOrdinal("dataPrazo")) == false ? reader.GetDateTime(reader.GetOrdinal("dataPrazo")) : DateTime.Now;
                                    _os.AdmOut = reader.IsDBNull(reader.GetOrdinal("AdmOut")) == false ? reader.GetString(reader.GetOrdinal("AdmOut")) : "";
                                    _os.titulo = reader.IsDBNull(reader.GetOrdinal("titulo")) == false ? reader.GetString(reader.GetOrdinal("titulo")) : "";
                                    _os.texto = reader.IsDBNull(reader.GetOrdinal("texto")) == false ? reader.GetString(reader.GetOrdinal("texto")) : "";
                                    _os.IdSetorOut = reader.IsDBNull(reader.GetOrdinal("IdSetorOut")) == false ? reader.GetInt32(reader.GetOrdinal("IdSetorOut")) : 0;
                                    _result.Add(_os);
                                }
                            }
                        }
                        #region Envio de E-mail
                        try
                        {
                            for (int i = 0; i < _result.Count; i++)
                            {

                                using (ccSendEmail busEmail = new ccSendEmail())
                                {
                                    using (ClassEmail email = new ClassEmail())
                                    {
                                        email.Assunto = @"Portal de O.S - Prazo da Conclusão de O.S";
                                        email.Menssagem = "<p  style = 'font-family:Arial;font-size:23pt;color:RED'>Vencimento do Prazo para Atendimento</p>" +
                                            "<div style = 'border-top:3px solid #22BCE5>...............................................</div>'" +
                                            "<br/>" + "<b>Informamos que o prazo para conclusão da O.S: </b>" + _result[i].codigo + "<b> será em 7 dias!</b><br />" +
                                            "<b>Setor responsável:</b> " + _result[i].IdSetorOut + " <br /> " +
                                            "<b>Título da O.S:</b> " + _result[i].titulo + " <br /> " +
                                            "<b>Texto da solicitação:</b> " + _result[i].texto + " <br /> " +
                                            "<a href='http://www.ccbos.com.br'>Acessar O.S!</a> " +
                                            "<br /><br /><br />" +
                                            "<b><code>Grupo de Apoio: Regional Ribeirão Preto <br/> Congregação Cristã no Brasil</code></b>" +
                                            "<br/><br/><b>Não responda este e-mail</b>,";


                                        List<String> listaDestinatarios = PessoaEmailBySetor(Convert.ToInt32(_result[i].IdSetorOut));
                                        foreach (var item in listaDestinatarios)
                                        {
                                            email.ListofDestinatario.Add(item);

                                        }

                                        busEmail.SendMail(email);

                                    }
                                }
                            }
                            return true;
                        }
                        catch (Exception)
                        {
                            return false;
                        }
                        #endregion

                    }
                }
                catch (Exception)
                {
                    return false;
                }

            }

        }


        public bool GetOsComPrazoExperirado()
        {
            List<OsDados> _result = new List<OsDados>();
            using (EntityConnection conn = new EntityConnection("name = ccbordemservEntities"))
            {
                try
                {
                    using (EntityCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = "ccbordemservEntities.OsComPrazoExperidado";
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;

                        using (conn)
                        {
                            if (conn.State == ConnectionState.Closed) conn.Open();
                            using (EntityDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
                            {                                
                                while (reader.Read())
                                {
                                    OsDados _os = new OsDados();
                                    _os.idOs = reader.IsDBNull(reader.GetOrdinal("idOs")) == false ? reader.GetInt32(reader.GetOrdinal("idOs")) : 0;
                                    _os.codigo = reader.IsDBNull(reader.GetOrdinal("codigo")) == false ? reader.GetString(reader.GetOrdinal("codigo")) : "";
                                    _os.dataCriacao = reader.IsDBNull(reader.GetOrdinal("dataCriacao")) == false ? reader.GetDateTime(reader.GetOrdinal("dataCriacao")) : DateTime.Now;
                                    _os.dataPrazo = reader.IsDBNull(reader.GetOrdinal("dataPrazo")) == false ? reader.GetDateTime(reader.GetOrdinal("dataPrazo")) : DateTime.Now;
                                    _os.AdmOut = reader.IsDBNull(reader.GetOrdinal("AdmOut")) == false ? reader.GetString(reader.GetOrdinal("AdmOut")) : "";
                                    _os.titulo = reader.IsDBNull(reader.GetOrdinal("titulo")) == false ? reader.GetString(reader.GetOrdinal("titulo")) : "";
                                    _os.texto = reader.IsDBNull(reader.GetOrdinal("texto")) == false ? reader.GetString(reader.GetOrdinal("texto")) : "";
                                    _os.IdSetorOut = reader.IsDBNull(reader.GetOrdinal("IdSetorOut")) == false ? reader.GetInt32(reader.GetOrdinal("IdSetorOut")) : 0;
                                    _result.Add(_os);
                                }
                            }
                        }
                        #region Envio de E-mail
                        try
                        {
                            for (int i = 0; i < _result.Count; i++)
                            {

                                using (ccSendEmail busEmail = new ccSendEmail())
                                {
                                    using (ClassEmail email = new ClassEmail())
                                    {
                                        email.Assunto = @"Portal de O.S - O Prazo expirado";
                                        email.Menssagem = "<p  style = 'font-family:Arial;font-size:23pt;color:RED'>Vencimento do Prazo para Atendimento</p>" +
                                            "<div style = 'border-top:3px solid #22BCE5>...............................................</div>'" +
                                            "<br/>" + "<b>Informamos que o prazo para conclusão da O.S: </b>" + _result[i].codigo + "<b> experiou!</b><br />" +
                                            "<b>Setor responsável:</b> " + _result[i].IdSetorOut + " <br /> " +
                                            "<b>Título da O.S:</b> " + _result[i].titulo + " <br /> " +
                                            "<b>Texto da solicitação:</b> " + _result[i].texto + " <br /> " +
                                            "<a href='http://www.ccbos.com.br'>Acessar O.S!</a> " +
                                            "<b>Caso precise de ajuda entre em contato com o responsável pela O.S através do forum</b> <br /> " +
                                            "<br /><br /><br />" +
                                            "<b><code>Grupo de Apoio: Regional Ribeirão Preto <br/> Congregação Cristã no Brasil</code></b>" +
                                            "<br/><br/><b>Não responda este e-mail</b>,";


                                        

                                        List<String> listaDestinatarios = PessoaEmailBySetor(Convert.ToInt32(_result[i].IdSetorOut));
                                        foreach (var item in listaDestinatarios)
                                        {
                                            email.ListofDestinatario.Add(item);

                                        }

                                        busEmail.SendMail(email);

                                    }
                                }
                            }
                            return true;
                        }
                        catch (Exception)
                        {
                            return false;
                        }
                        #endregion
                    }
                }
                catch (Exception)
                {
                    return false;
                }

            }

        }


        public List<String> PessoaEmailBySetor(int aIdSetor)
        {
            using (EntityConnection conn = new EntityConnection("name = ccbordemservEntities"))
            {
                try
                {
                    using (EntityCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = "ccbordemservEntities.ccPessoaEmailBySetor1";
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;

                        EntityParameter param;
                        param = cmd.Parameters.Add("IDSETOR", DbType.Int32);
                        param.Direction = ParameterDirection.Input;
                        if (aIdSetor != 0)
                            param.Value = aIdSetor;
                        else
                            param.Value = DBNull.Value;


                        using (conn)
                        {
                            if (conn.State == System.Data.ConnectionState.Closed) conn.Open();
                            using (EntityDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
                            {
                                List<String> _result = new List<String>();
                                String _pessoa;
                                while (reader.Read())
                                {
                                    _pessoa = reader.IsDBNull(reader.GetOrdinal("email")) == false ? reader.GetString(reader.GetOrdinal("email")) : "";
                                    _result.Add(_pessoa);
                                }
                                return _result;
                            }
                        }


                    }
                }
                catch (Exception)
                {
                    return null;
                }

            }
        }
    }
}
